package cn.hy.机考.part05;

import java.util.Scanner;

/**
 * @author hy
 * <p>
 * 四十一、玩牌高手
 * 给定一个长度为 n 的整型数组，表示一个选手在 n 轮内可选择的牌面分数 选手基于规则选牌，
 * 请计算所有轮结束后其可以获得的最高总分数 在每轮里选手可以选择获取该轮牌面，则其总分数加上该轮牌面分数，为其新的总分数
 * 选手也可不选择本轮牌面直接跳到下一轮，此时将当前总分数还原为 3轮前的总分数，
 * 若当前轮次小于等于 3(即在第 1、2、3 轮选择跳过轮次)，则总分数置为 0 选手的初始总分数为 0，且必须依次参加每一轮 所有轮结束后选手获得的最高总分数
 * <p>
 * 总共有 7 轮牌面
 * 第一轮选择该轮牌面，总分数为 1
 * 第二轮不选择该轮牌面，总分数还原为 0
 * 第三轮不选择该轮牌面，总分数还原为 0
 * 第四轮选择该轮牌面，总分数为 4
 * 第五轮选择该轮牌面，总分数为 7
 * 第六轮选择该轮牌面，总分数为 13
 * 第七轮如果不选择该轮牌面，则总分数还原到 3 轮前分数，即第四轮的总分数 4， 如果选择该轮牌面，总分数为 11，所以选择该轮牌面。因此，最终的最高总分为 11
 * 1,-5,-6,4,3,6,-2
 * 11
 */
public class Demo41 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String[] arrStr = line.split(",");
        int[] arr = new int[arrStr.length];
        for (int i = 0; i < arrStr.length; i++) {
            arr[i] = Integer.parseInt(arrStr[i]);
        }
        int ans = score(arr);
        System.out.println(ans);
    }

    public static int score(int[] arr) {
        if (arr.length == 0) return -1;
        // 第一步, 定义状态, 用一个数组, 表示当前轮次的最高得分
        int[] dp = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            // 第二步, 状态转移方程, f(n) = max(f(n-1) + scores[n], f(n-3))
            if (i < 3) {
                dp[i] = Math.max(arr[i], 0);
            } else {
                dp[i] = Math.max(dp[i - 1] + arr[i], dp[i - 3]);
            }
        }
        return dp[arr.length - 1];
    }
}
